package mkpsolving;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * Created by Julien on 09/04/14.
 */
public class Test {
    public static void main(String[] args) {

        List<Objet> objetList = new ArrayList<Objet>();
        List<Sac> sacList = new ArrayList<Sac>();

        while (true) {

            System.out.println("\n============================ Menu ============================\n" +
                    "\n1 => Générer des objets " +
                    "\n2 => Générer des sacs" +
                    "\n3 => Générer Aléatoirement" +
                    "\n4 => Résoudre" +
                    "\n5 => Supprimer les objets et les sacs" +
                    "\n6 => Quitter");
            Scanner sc = new Scanner(System.in);
            int choix = sc.nextInt();
            switch (choix)
            {
                case 1:
                    System.out.println("nombre d'objet ?");
                    int nbObj = sc.nextInt();
                    for(int i=1;i<=nbObj;i++)
                    {
                        System.out.println("Objet "+i+ "=> Poid :");
                        double p = sc.nextDouble();
                        System.out.println("Objet "+i+ "=> utilité :");
                        double u = sc.nextDouble();
                        Objet objet = new Objet(p,u);
                        objetList.add(objet);
                    }
                    break;
                case 2:
                    System.out.println("nombre de sac ?");
                    int nbsac = sc.nextInt();
                    for(int i=1;i<=nbsac;i++)
                    {
                        System.out.println("sac "+i+ "=> Poid :");
                        double p = sc.nextDouble();
                        Sac sac = new Sac(p);
                        sacList.add(sac);
                    }
                    break;
                case 3:
                    int nbS = 1+(int)(Math.random()*((5-1) + 1));
                    int nbO = 2+(int)(Math.random()*((10-2) + 1));
                    int i,p,u;
                    for(i=1;i<=nbO;i++)
                    {
                        p = 1+(int)(Math.random()*((10-1) + 1));
                        u = 1+(int)(Math.random()*((20-1) + 1));
                        Objet objet = new Objet(p,u);
                        objetList.add(objet);
                    }
                    for(Objet objet :objetList){
                        System.out.println(objet);
                    }
                    for(i=1;i<=nbS;i++)
                    {
                        p =  10+(int)(Math.random()*((20-10) + 1));
                        Sac sac = new Sac(p);
                        sacList.add(sac);
                    }
                    System.out.println("\n");
                    for(Sac sac :sacList)
                    {
                        System.out.println("sac "+sac.getId()+", Poid : "+sac.getvolume());
                    }
                    break;
                case 4:
                    if(sacList.isEmpty() || objetList.isEmpty())
                    {
                        if(objetList.isEmpty())
                        {
                            System.out.println("Veuillez générer des objets");
                        }
                        if(sacList.isEmpty())
                        {
                            System.out.println("Veuillez générer des sacs");
                        }
                    }
                    else
                    {
                        Mkp mkp = new Mkp(objetList, sacList);
                        mkp.solving();
                        System.out.println("\nMeilleur solution trouvé: ");
                        for(Sac sac : mkp.getSacResult()){
                            if(sac.isSolution()){
                                System.out.println(sac);
                            }else{
                                System.out.println("\nLe sac "+sac.getId()+ " n'est pas utilisé");
                            }
                        }
                    }
                    break;
                case  5:
                    objetList.clear();
                    sacList.clear();
                    break;
                case  6:
                    System.exit(0);
                default:
                    System.out.println("Choix incorrect. Reesayez");
                    break;
            }
        }
    }
}
